home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <conio.h>
- #include<bios.h>
- #include<concur.h>
-
- /************************************************************************/
- void taskabort(void)
- {
- cprintf("\n\rTASK ERROR: Unexpected End of Task%3d\n\r",taskind);
- exit(133+taskind);
- }
- void claiminput(void)
- {
- while(INPUTBUSY) switchta();
- INPUTBUSY=1;
- }
- void releaseinput(void)
- {
- INPUTBUSY=0;
- }
-
- /*int getch(void)
- {
- int i;
- if (bioskey(1)==0) switchta();
- else i=bioskey(0);
- return(i);
- }
- */
-
- /************************************************************************/
- int getche(void)
- {
- int i;
- while (!kbhit()) switchta();
- i=getch();
- cprintf("%c",i);
- return(i);
- }
-
-
- /************************************************************************/
- void taskwindow(int x3, int y3, int x4, int y4, char attribute)
- {
- int i,j;
-
- windows[taskind].y2=y4-1;
- windows[taskind].x2=x4-1;
- windows[taskind].y1=y3-1;
- windows[taskind].x1=x3-1;
- windows[taskind].row=windows[taskind].y1;
- windows[taskind].col=windows[taskind].x1;
- windows[taskind].attr=attribute;
- textattr(windows[taskind].attr);
- window (x3,y3,x4,y4);
- }
-
- /************************************************************************/
- void dummy(void)
-
- { int x;
- for (x=1;x<15;++x)
- {
- cprintf(" Function Dummy(): task%2d, Index Value X=%2d\n\r",taskind,x);
- switchta();
- }
- }
-
- /************************************************************************/
- void border(char *header)
- {
- int i,j;
- cprintf("┌");
- for (i=windows[taskind].x1;
- i<=((windows[taskind].x2-windows[taskind].x1-(strlen(header)))/2
- +windows[taskind].x1-1);i++) cprintf("─");
- cprintf(header);
- for (i=((windows[taskind].x2-windows[taskind].x1+(strlen(header)))/2
- +windows[taskind].x1);
- i<windows[taskind].x2-1;i++) cprintf("─");
- cprintf("┐");
- for (i=windows[taskind].y1+1;i<=windows[taskind].y2-2;i++)
- {cprintf("│");
- for(j=windows[taskind].x1;j<windows[taskind].x2-1;j++) cprintf(" ");
- cprintf("│");}
- cprintf("└");
- for (i=windows[taskind].x1-1;i<=windows[taskind].x2-3;i++) cprintf("─");
- cprintf("┘");
- windows[taskind].x1++;
- windows[taskind].y1++;
- windows[taskind].x2--;
- windows[taskind].y2--;
- windows[taskind].y2--;
- gotoxy(1,1);
- switchta();
- }
- /************************************************************************/
-
- void task1(void)
- { int i;
- taskwindow(1,1,38,18,7+128);
-
- border("TASK 1");
- textcolor(07);
-
- do{
- cprintf("\n\rTask1-before switch\n\r");
- for (i=1;i<=10;i++)
- {
- switchta();
- cprintf(" I =%2d\n\r",i);
- }
- dummy();
- cprintf("\n\rTask1-after switch");
- }while (1!=0);
- }
-
- /************************************************************************/
-
- void task2(void)
- { FILE *f;
- int ch;
-
-
- taskwindow(39,1,80,10,7);
- border("TASK 2");
- textcolor(15);
- do{
- switchta();
- f=fopen("concur.c","r");
- if (f==NULL) cprintf("error%4d cannot open concur.c\n\r",f);
- while ((ch=fgetc(f))!= EOF)
- { if (ch<=13) switchta();
- putch(ch);
- }
-
- fclose(f);
- }while(1!=0);
- }
- /************************************************************************/
-
- void task3(void)
- {
- FILE *f;
- int ch;
-
- textbackground(7);
- taskwindow(40,10,76,18,0+(7<<4));
- textcolor(0);
- border("TASK 3");
-
-
- do{
- cprintf("\n\r Task 3\n\r");
- switchta();
- dummy();
- f=fopen("concur.doc","r");
- if (f==NULL) cprintf("error%4d cannot open concur.doc\n\r",f);
- while ((ch=fgetc(f))!= EOF)
- { if (ch<=13) switchta();
- putch(ch);
- }
-
- fclose(f);
-
- cprintf("\n\rTask 3-after switch\n\r");
- }while(1!=0);
- }
-
- /************************************************************************/
- void install(int i,int paragraphs,void (*task)(void))
- { unsigned stackarea[14];
- int x;
-
- if ((i>=15)||(i<1)){ cprintf("\n\rInstall Error: Illegal task number%3d\n\r",i );
- exit(33+i);}
- jpr[i]->j_ss=_SS;
- jpr[i]->j_sp=_SP-_stklen -2;
- _stklen=_stklen+(paragraphs*16);
- poke(jpr[i]->j_ss,jpr[i]->j_sp,task);
- poke(jpr[i]->j_ss,jpr[i]->j_sp+2,taskabort);
- _ES=_DS;
- jpr[i]->j_flag=0x200;
- jpr[i]->j_cs=_CS;
- /*jpr[i]->j_ip=task;*/
- jpr[i]->j_bp=jpr[i]->j_sp;
- jpr[i]->j_di=_DI;
- jpr[i]->j_es=_ES;
- jpr[i]->j_si=_SI;
- jpr[i]->j_ds=_DS;
- taskwindow(1,1,80,25,7);
- if (i!=0) maxtask++;
- }
-
- /************************************************************************/
- void main(void)
- {
- int x;
- char name[30];
- directvideo=0;
-
-
- install(1, 200,task1);
- install(2, 200,task2);
- install(3, 200,task3);
- taskwindow(1,18,80,25,15);
- border("Main Program");
- jpr[0]->j_sp=_SP; /* do not move this line*/
-
- cprintf("task%2d M A I N P R O G R A M W I N D O W\n\r",taskind);
- do{
- switchta();
- cprintf("\n\r");
- claiminput();
- cscanf("%s",name);
- releaseinput();
- }while(1!=0);
- }